package logica.pruebas;

import java.awt.Color;
import java.rmi.RemoteException;

import logica.clases.Pais;
import logica.datatypes.Jugador.DataJugador_R1;
import logica.datatypes.Jugador.DataJugador_R5;
import logica.datatypes.Partida.DataPartida_R1;
import logica.datatypes.Partida.DataPartida_R4;
import logica.excepciones.JugadoresException;
import logica.excepciones.PartidaException;
import persistencia.PersistenciaException;
import logica.fachadas.FachadaModerador;

public class PruebaFachadaModerador {
	
	public static void main(String[] args)throws RemoteException, PartidaException, PersistenciaException, JugadoresException{
		
		try {

			FachadaModerador prueba = new FachadaModerador();
			Color color= Color.WHITE;
			DataJugador_R1 dataJugador_R1 = new DataJugador_R1("Jose",color);
			color= Color.BLACK;
			DataJugador_R1 dataJugador_R2 = new DataJugador_R1("Pedro",color);
			color= Color.BLUE;
			DataJugador_R1 dataJugador_R3 = new DataJugador_R1("Maria",color);
			
			DataJugador_R1[] dataJugadores = new DataJugador_R1[3];
			dataJugadores[0] = dataJugador_R1;
			dataJugadores[1] = dataJugador_R2;
			dataJugadores[2] = dataJugador_R3;
			
			DataPartida_R1 dataPartida_R1 = new DataPartida_R1("Partida1", dataJugadores) ;
			DataPartida_R1 dataPartida_R2 = new DataPartida_R1("Partida2", dataJugadores) ;
			DataPartida_R1 dataPartida_R3 = new DataPartida_R1("Partida3", dataJugadores) ;
	
			prueba.crearNuevaPartida(dataPartida_R1);
			prueba.crearNuevaPartida(dataPartida_R2);
			prueba.crearNuevaPartida(dataPartida_R3);
			
			System.out.print("Partidas ingresadas\n");
			DataPartida_R4 dataPartida_R4[] = prueba.listarCodPartidas();
			DataJugador_R5[] dataJugador_R5;
			
			int cantPart = dataPartida_R4.length;
			
			for (int i=0; i<cantPart; i++){
				System.out.print("\nCodigo Partida: " + dataPartida_R4[i].getCodigo());
				dataJugador_R5 = prueba.listarNomJugadores("Partida1"); 
				
				System.out.print("\n                Nombre Jugadores: ");
				int cantJug = dataJugador_R5.length; 
				for (int c=0; c<cantJug; c++){
					System.out.print(dataJugador_R5[c].getNombre() + " ");		
				}
			}
			System.out.print("\n\n");
			
			//---------
			
			prueba.iniciarPartida("Partida1");  
			System.out.print("Se ha iniciado la partida con codigo: Partida1\n");
			prueba.detenerPartida("Partida1");
			System.out.print("Se ha detenido la partida con codigo: Partida1\n");
			prueba.iniciarPartida("Partida2");   
			System.out.print("Se ha iniciado la partida con codigo: Partida2\n");
			prueba.detenerPartida("Partida2");
			System.out.print("Se ha detenido la partida con codigo: Partida2\n");
			prueba.reanudarPartida("Partida2");
			System.out.print("Se ha reanudado la partida con codigo: Partida2\n");
			
			prueba.iniciarTurno("Partida2");
			
			System.out.print("\nSe ha iniciado turno de la Partida2\n");
			
			prueba.guardarCambios();

			System.out.print("\nSe han guardado los cambios del sistema\n");
			
			FachadaModerador prueba2 = new FachadaModerador();
			
			System.out.print("Partidas ingresadas\n");
			DataPartida_R4 dataPartida_R4_2[] = prueba2.listarCodPartidas();
			DataJugador_R5[] dataJugador_R5_2;
			
			int cantPart2 = dataPartida_R4_2.length;
			
			for (int i2=0; i2<cantPart2; i2++){
				System.out.print("\nCodigo Partida: " + dataPartida_R4_2[i2].getCodigo());
				dataJugador_R5_2 = prueba2.listarNomJugadores("Partida1"); 
				
				System.out.print("\n                Nombre Jugadores: ");
				int cantJug2 = dataJugador_R5_2.length; 
				for (int c2=0; c2<cantJug2; c2++){
					System.out.print(dataJugador_R5_2[c2].getNombre() + " ");		
				}
			}
			
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (PersistenciaException e) {
			System.out.print(e.darMensaje());
		} catch (JugadoresException e) {
			System.out.print(e.darMensaje());
		} catch (PartidaException e) {
			System.out.print(e.darMensaje());
		}
		
		
	}
}
